import tool from '../modules/tool'

export default async (reloadPage, handleError) => {

    const data = {
        form: {
            currentPage: 1,
            pageSize: 10,
        },
        async get(form = undefined) {
            if (form === undefined) form = this.form
            let re = await tool.requestData('/personal-work/my-message', form, {}, 'get')
            if (re.status) {
                return re.data.data
            } else {
                throw re.content
            }
        },
        data: {},
        getCurrentPageIds() {
            let re = []
            for (let i = 0; i < this.data.data.length; i++)re.push(this.data.data[i].id)
            return re
        },
        select: {
            list: [],
            add(id) {
                if (id instanceof Array) {
                    this.list = [...this.list, ...id]
                } else {
                    this.list.push(id)
                }
                this.list = [... new Set(this.list)]
            },
            delete(id) {
                if (id instanceof Array) {
                    for (let i = 0; i < id.length; i++) {
                        this.list.filter(item => item != id[i])
                    }
                } else {
                    this.list.filter(item => item != id)
                }
            },
            deleteAll() {
                this.list = []
            },
            is(id) {
                return Boolean(this.list.indexOf(id) + 1)
            }
        },
        pageSize: {
            currentLefts() {
                let re = []
                let t = data.form.currentPage - 1
                while (t && Math.abs(t - data.form.currentPage) < 6) {
                    re.push(t)
                    t--
                }
                return re
            },
            currentRights() {
                let re = []
                let t = data.form.currentPage + 1
                while (t <= tool.getTotalPageByPageSize(data.form.pageSize, data.data.total) && Math.abs(t - data.form.currentPage) < 6) {
                    re.push(t)
                    t++
                }
                return re
            },
            total() {
                return tool.getTotalPageByPageSize(data.form.pageSize, data.data.total)
            },
            current() {
                return data.form.currentPage
            },
            async handleChange(to) {
                if (!to) to = data.form.currentPage
                await tool.flow(async () => {
                    let re = await data.get(Object.assign(data.form, {
                        currentPage: to
                    }))
                    data.data = re
                    data.form = Object.assign(data.form, {
                        currentPage: to
                    })
                    reloadPage()
                }, err => tool.toast.error(`${err}`))
            }
        }
    }

    data.data = (await data.get())

    const refresh = async () => {
        return {
            type: 1,
            main: {
                tab: [
                    {
                        title: '',
                        minHeight: '600px',
                        bottomControls: await (async () => {
                            if (data.pageSize.total()) {
                                return [
                                    {
                                        type: 'label',
                                        title: `共${data.data.total}个，${data.pageSize.total()}页`,
                                        style: {
                                            fontSize: '14px',
                                            color: '#409eff'
                                        }
                                    },
                                    ...tool.cControls.getSplit(),
                                    {
                                        type: 'button',
                                        title: '<< 第一页',
                                        disabled: data.pageSize.current() == 1,
                                        callBack: async () => {
                                            await data.pageSize.handleChange(1)
                                            reloadPage()
                                        }
                                    },
                                    {
                                        type: 'button',
                                        title: '< 上一页',
                                        disabled: data.pageSize.current() == 1,
                                        callBack: async () => {
                                            await data.pageSize.handleChange(data.pageSize.current() - 1)
                                            reloadPage()
                                        }
                                    },
                                    ...await tool.execFunc(async () => {
                                        let re = [...data.pageSize.currentLefts(), data.pageSize.current(), ...data.pageSize.currentRights()].sort((a, b) => {
                                            return a - b
                                        })
                                        await tool.array.format(re, async (item) => {
                                            return {
                                                type: 'button',
                                                title: item,
                                                style: {
                                                    type: item == data.pageSize.current() ? 'primary' : ''
                                                },
                                                callBack: async () => {
                                                    if (item == data.pageSize.current()) return
                                                    await data.pageSize.handleChange(item)
                                                    reloadPage()
                                                }
                                            }
                                        })
                                        return re
                                    }),
                                    {
                                        type: 'button',
                                        title: '下一页 >',
                                        disabled: data.pageSize.current() >= data.pageSize.total(),
                                        callBack: async () => {
                                            await data.pageSize.handleChange(data.pageSize.current() + 1)
                                            reloadPage()
                                        }
                                    },
                                    {
                                        type: 'button',
                                        title: '最后一页 >>',
                                        disabled: data.pageSize.current() >= data.pageSize.total(),
                                        callBack: async () => {
                                            await data.pageSize.handleChange(data.pageSize.total())
                                            reloadPage()
                                        }
                                    },
                                    ...tool.cControls.getSplit(),
                                    {
                                        type: 'label',
                                        title: `转到`,
                                        style: {
                                            fontSize: '14px',
                                            color: 'gray'
                                        }
                                    },
                                    {
                                        type: 'input',
                                        default: '',
                                        disabled: false,
                                        placeholder: '页码',
                                        icon: 'switch',
                                        style: {
                                            width: '60px'
                                        },
                                        inputCallBack: (e) => {

                                        },
                                        okCallBack: async (e) => {
                                            if (e == '') return
                                            if (isNaN(e)) {
                                                tool.toast.error(`页码应为正整数且不能大于${data.pageSize.total()}`)
                                                return
                                            }
                                            if (e < 1 || e > data.pageSize.total()) {
                                                reloadPage()
                                                tool.toast.error(`页码应为正整数且不能大于${data.pageSize.total()}`)
                                                return
                                            }
                                            data.form.currentPage = parseInt(e)
                                            await data.get()
                                            reloadPage()
                                        }
                                    },
                                    {
                                        type: 'label',
                                        title: `每页个数`,
                                        style: {
                                            fontSize: '14px',
                                            color: 'gray'
                                        }
                                    },
                                    {
                                        type: 'select',
                                        options: [
                                            5, 10, 15, 20, 100, 300, 500, 1000, 5000, 10000, 100000
                                        ],
                                        placeholder: '',
                                        default: data.form.pageSize,
                                        style: {
                                            width: '100px'
                                        },
                                        callBack: async (e) => {
                                            data.form.pageSize = e
                                            data.form.currentPage = 1
                                            data.data = await data.get()
                                            reloadPage()
                                        }
                                    },
                                    ...tool.cControls.getSplit(),
                                    {
                                        type: 'button',
                                        title: '刷新',
                                        leftIcon: 'reset',
                                        callBack: async () => {
                                            await search.pageSize.handleChange(search.pageSize.current())
                                            reloadPage()
                                        }
                                    }
                                ]
                            } else {
                                return []
                            }
                        })(),
                        topControls: (() => {
                            if (!data.data.data.length) {
                                return [
                                    {
                                        type: 'label',
                                        title: '暂无消息',
                                    }
                                ]
                            }
                        })(),
                        data: (() => {
                            if (data.data.data.length) {
                                return {
                                    type: 'table',
                                    enableSelect: false,
                                    form: [
                                        {
                                            field: 'title',
                                            title: '标题',
                                        },
                                        {
                                            field: 'status',
                                            title: '状态',
                                        },
                                        {
                                            field: 'startTime',
                                            title: '开始时间',
                                        },
                                        {
                                            field: 'endTime',
                                            title: '结束时间',
                                        },
                                        {
                                            field: 'description',
                                            title: '描述',
                                        },
                                    ],
                                    list: (() => {
                                        let re = []

                                        for (let i = 0; i < data.data.data.length; i++) {
                                            let current = data.data.data[i]
                                            current.startTime = tool.formatDate3(new Date(current.startTime))
                                            current.endTime = tool.formatDate3(new Date(current.endTime))
                                            current._selected = data.select.is(current.id)
                                            current.op = [
                                                // {
                                                //     title: '查看',
                                                //     op: "preview",
                                                //     icon: 'preview'
                                                // },
                                                // {
                                                //     title: '还原',
                                                //     op: "reset",
                                                //     icon: 'reset'
                                                // },
                                            ]
                                            re.push(current)
                                        }

                                        return re
                                    })(),
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    //     {
                                    //         title: '83279408712398748902123',
                                    //         content: '942384781029347981324980217348903219084298042398042130984729183478932184578945704657843657894326587943657834625789436785963475986437859643785347895643789657893465',
                                    //         operations: [
                                    //             {
                                    //                 tip: '查看文件',
                                    //                 icon: 'dataset',
                                    //                 op: 'showFiles'
                                    //             },
                                    //             {
                                    //                 tip: '预览',
                                    //                 icon: 'dataset',
                                    //                 op: 'preview'
                                    //             },
                                    //             {
                                    //                 tip: '下载',
                                    //                 icon: 'dataset',
                                    //                 op: 'download'
                                    //             },
                                    //         ],
                                    //     },
                                    // ],
                                    // isSelectedCallBack: (item) => {
                                    //     return true
                                    // },
                                    callBack: async (e) => {
                                        console.log(e)
                                        if (e.op == 'select') {
                                            data.select.add(e.item.id)
                                        }
                                        if (e.op == 'unselect') {
                                            data.select.delete(e.item.id)
                                        }
                                        if (e.op == 'selectAll') {
                                            data.select.add(tool.selectValueOfObjectByKey(data.data.data, 'id'))
                                        }
                                        if (e.op == 'unselectAll') {
                                            data.select.deleteAll()
                                        }
                                        reloadPage()
                                    },
                                }
                            } else {
                                return undefined
                            }
                        })(),
                    }
                ]
            }
        }
    }

    return refresh
}